Micron Document
🎖️GitЯра🎖️

Node / meshtastic / Meshtastic-Android / files / core / domain / src / commonMain / kotlin / org / meshtastic / core / domain / usecase / settings / ExportNodeDatabaseUseCase.kt

Displaying Raw • Download

core/domain/src/commonMain/kotlin/org/meshtastic/core/domain/usecase/settings/ExportNodeDatabaseUseCase.kt bd2863243bab6eb213401d949839a2bc74dde7e2 (bd286324) Text, 9.32 KB

T8b949e/*
* Copyright (c) 2026 Meshtastic LLC
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
Tff7b72package T7ee787org.meshtastic.core.domain.usecase.settings

Tff7b72import T7ee787kotlinx.serialization.ExperimentalSerializationApi
Tff7b72import T7ee787kotlinx.serialization.json.Json
Tff7b72import T7ee787kotlinx.serialization.json.okio.encodeToBufferedSink
Tff7b72import T7ee787okio.BufferedSink
Tff7b72import T7ee787org.koin.core.annotation.Single
Tff7b72import T7ee787org.meshtastic.core.common.util.nowMillis
Tff7b72import T7ee787org.meshtastic.core.model.Node
Tff7b72import T7ee787org.meshtastic.core.model.util.GeoConstants
Tff7b72import T7ee787org.meshtastic.core.repository.NodeRepository
Tff7b72import T7ee787org.meshtastic.proto.AirQualityMetrics
Tff7b72import T7ee787org.meshtastic.proto.DeviceMetadata
Tff7b72import T7ee787org.meshtastic.proto.DeviceMetrics
Tff7b72import T7ee787org.meshtastic.proto.EnvironmentMetrics
Tff7b72import T7ee787org.meshtastic.proto.HardwareModel
Tff7b72import T7ee787org.meshtastic.proto.MeshPacket
Tff7b72import T7ee787org.meshtastic.proto.Paxcount
Tff7b72import T7ee787org.meshtastic.proto.PowerMetrics
Tff7b72import T7ee787kotlin.time.Instant
Tff7b72import T7ee787org.meshtastic.proto.Position Tff7b72as Te6edf3WirePosition

T8b949e/**
* Exports the currently selected device's node database as a JSON [NodeDatabaseExport] document. Absent readings are
* omitted rather than written as 0/sentinel values, so 0 dB SNR or 0 °C stay distinguishable from "no reading".
*/
Tf0883e@Single
Tff7b72class T56d364ExportNodeDatabaseUseCaseTb4b4b4(Tff7b72private Tff7b72val Te6edf3nodeRepositoryTb4b4b4: Te6edf3NodeRepositoryTb4b4b4) Tb4b4b4{

Tff7b72companion Tff7b72object Tb4b4b4{
Tff7b72private Tff7b72const Tff7b72val Te6edf3SCHEMA_VERSION Tff7b72= T79c0ff1
Tb4b4b4}

Tff7b72private Tff7b72val Te6edf3json Tff7b72= Te6edf3Json Tb4b4b4{
Te6edf3prettyPrint Tff7b72= Tff7b72true
Te6edf3explicitNulls Tff7b72= Tff7b72false
Tb4b4b4}

Tf0883e@OptInTb4b4b4(Te6edf3ExperimentalSerializationApiTff7b72::Te6edf3classTb4b4b4)
Tff7b72suspend Tff7b72operator Tff7b72fun Td2a8ffinvokeTb4b4b4(Te6edf3sinkTb4b4b4: Te6edf3BufferedSinkTb4b4b4) Tb4b4b4{
Tff7b72val Te6edf3nodes Tff7b72=
Te6edf3nodeRepository
Tb4b4b4.Te6edf3getNodeDbSnapshotTb4b4b4(Tb4b4b4)
Tb4b4b4.Te6edf3values
Tb4b4b4.Te6edf3sortedWithTb4b4b4(Te6edf3compareByDescendingTff7b72<Te6edf3NodeTff7b72> Tb4b4b4{ Tffa657itTb4b4b4.Te6edf3lastHeard Tb4b4b4}Tb4b4b4.Te6edf3thenBy Tb4b4b4{ Tffa657itTb4b4b4.Te6edf3numTb4b4b4.Te6edf3toUIntTb4b4b4(Tb4b4b4) Tb4b4b4}Tb4b4b4)
Tb4b4b4.Te6edf3map Tb4b4b4{ Tffa657itTb4b4b4.Te6edf3toExportTb4b4b4(Tb4b4b4) Tb4b4b4}
Tff7b72val Te6edf3export Tff7b72=
Te6edf3NodeDatabaseExportTb4b4b4(
Te6edf3schemaVersion Tff7b72= Te6edf3SCHEMA_VERSIONTb4b4b4,
Te6edf3exportedAt Tff7b72= Te6edf3InstantTb4b4b4.Te6edf3fromEpochMillisecondsTb4b4b4(Te6edf3nowMillisTb4b4b4)Tb4b4b4.Te6edf3toStringTb4b4b4(Tb4b4b4)Tb4b4b4,
Te6edf3myNodeNum Tff7b72= Te6edf3nodeRepositoryTb4b4b4.Te6edf3myNodeInfoTb4b4b4.Te6edf3valueTff7b72?.Te6edf3myNodeNumTff7b72?.Te6edf3toUnsignedLongTb4b4b4(Tb4b4b4)Tb4b4b4,
Te6edf3nodes Tff7b72= Te6edf3nodesTb4b4b4,
Tb4b4b4)
Te6edf3jsonTb4b4b4.Te6edf3encodeToBufferedSinkTb4b4b4(Te6edf3exportTb4b4b4, Te6edf3sinkTb4b4b4)
Te6edf3sinkTb4b4b4.Te6edf3flushTb4b4b4(Tb4b4b4)
Tb4b4b4}
Tb4b4b4}

Tff7b72private Tff7b72fun Te6edf3IntTb4b4b4.Td2a8fftoUnsignedLongTb4b4b4(Tb4b4b4)Tb4b4b4: Tffa657Long Tff7b72= Te6edf3toUIntTb4b4b4(Tb4b4b4)Tb4b4b4.Te6edf3toLongTb4b4b4(Tb4b4b4)

Tff7b72private Tff7b72fun Te6edf3NodeTb4b4b4.Td2a8fftoExportTb4b4b4(Tb4b4b4)Tb4b4b4: Te6edf3NodeExport Tff7b72= Te6edf3NodeExportTb4b4b4(
Te6edf3num Tff7b72= Te6edf3numTb4b4b4.Te6edf3toUnsignedLongTb4b4b4(Tb4b4b4)Tb4b4b4,
Te6edf3id Tff7b72= Te6edf3userTb4b4b4.Te6edf3idTb4b4b4.Te6edf3takeIf Tb4b4b4{ Tffa657itTb4b4b4.Te6edf3isNotEmptyTb4b4b4(Tb4b4b4) Tb4b4b4}Tb4b4b4,
Te6edf3longName Tff7b72= Te6edf3userTb4b4b4.Te6edf3long_nameTb4b4b4.Te6edf3takeIf Tb4b4b4{ Tffa657itTb4b4b4.Te6edf3isNotEmptyTb4b4b4(Tb4b4b4) Tb4b4b4}Tb4b4b4,
Te6edf3shortName Tff7b72= Te6edf3userTb4b4b4.Te6edf3short_nameTb4b4b4.Te6edf3takeIf Tb4b4b4{ Tffa657itTb4b4b4.Te6edf3isNotEmptyTb4b4b4(Tb4b4b4) Tb4b4b4}Tb4b4b4,
Te6edf3hwModel Tff7b72= Te6edf3userTb4b4b4.Te6edf3hw_modelTb4b4b4.Te6edf3takeIf Tb4b4b4{ Tffa657it Tff7b72!Tff7b72= Te6edf3HardwareModelTb4b4b4.Te6edf3UNSET Tb4b4b4}Tff7b72?.Te6edf3nameTb4b4b4,
Te6edf3role Tff7b72= Te6edf3userTb4b4b4.Te6edf3roleTb4b4b4.Te6edf3nameTb4b4b4,
Te6edf3isLicensed Tff7b72= Te6edf3userTb4b4b4.Te6edf3is_licensedTb4b4b4,
Te6edf3isUnmessagable Tff7b72= Te6edf3userTb4b4b4.Te6edf3is_unmessagableTb4b4b4,
Te6edf3publicKey Tff7b72= Tb4b4b4(Te6edf3publicKey Tff7b72?: Te6edf3userTb4b4b4.Te6edf3public_keyTb4b4b4)Tb4b4b4.Te6edf3takeIf Tb4b4b4{ Tffa657itTb4b4b4.Te6edf3size Tff7b72> T79c0ff0 Tb4b4b4}Tff7b72?.Te6edf3base64Tb4b4b4(Tb4b4b4)Tb4b4b4,
Te6edf3signsPackets Tff7b72= Te6edf3signsPacketsTb4b4b4,
Te6edf3manuallyVerified Tff7b72= Te6edf3manuallyVerifiedTb4b4b4,
Te6edf3lastHeard Tff7b72= Te6edf3lastHeardTb4b4b4.Te6edf3takeIf Tb4b4b4{ Tffa657it Tff7b72!Tff7b72= T79c0ff0 Tb4b4b4}Tff7b72?.Te6edf3toLongTb4b4b4(Tb4b4b4)Tb4b4b4,
Te6edf3snr Tff7b72= Te6edf3snrOrNullTb4b4b4,
Te6edf3rssi Tff7b72= Te6edf3rssiOrNullTb4b4b4,
Te6edf3channel Tff7b72= Te6edf3channelTb4b4b4,
Te6edf3viaMqtt Tff7b72= Te6edf3viaMqttTb4b4b4,
Te6edf3hopsAway Tff7b72= Te6edf3hopsAwayTb4b4b4.Te6edf3takeIf Tb4b4b4{ Tffa657it Tff7b72>Tff7b72= T79c0ff0 Tb4b4b4}Tb4b4b4,
Te6edf3lastTransport Tff7b72= Te6edf3MeshPacketTb4b4b4.Te6edf3TransportMechanismTb4b4b4.Te6edf3fromValueTb4b4b4(Te6edf3lastTransportTb4b4b4)Tff7b72?.Te6edf3takeIf Tb4b4b4{ Te6edf3lastTransport Tff7b72!Tff7b72= T79c0ff0 Tb4b4b4}Tff7b72?.Te6edf3nameTb4b4b4,
Te6edf3isFavorite Tff7b72= Te6edf3isFavoriteTb4b4b4,
Te6edf3isIgnored Tff7b72= Te6edf3isIgnoredTb4b4b4,
Te6edf3isMuted Tff7b72= Te6edf3isMutedTb4b4b4,
Te6edf3nodeStatus Tff7b72= Te6edf3nodeStatusTff7b72?.Te6edf3takeIf Tb4b4b4{ Tffa657itTb4b4b4.Te6edf3isNotEmptyTb4b4b4(Tb4b4b4) Tb4b4b4}Tb4b4b4,
Te6edf3notes Tff7b72= Te6edf3notesTb4b4b4.Te6edf3takeIf Tb4b4b4{ Tffa657itTb4b4b4.Te6edf3isNotEmptyTb4b4b4(Tb4b4b4) Tb4b4b4}Tb4b4b4,
Te6edf3position Tff7b72= Te6edf3positionTb4b4b4.Te6edf3toExportTb4b4b4(Tb4b4b4)Tb4b4b4,
Te6edf3deviceMetrics Tff7b72= Te6edf3deviceMetricsTb4b4b4.Te6edf3toExportTb4b4b4(Tb4b4b4)Tb4b4b4,
Te6edf3environmentMetrics Tff7b72= Te6edf3environmentMetricsTb4b4b4.Te6edf3toExportTb4b4b4(Tb4b4b4)Tb4b4b4,
Te6edf3powerMetrics Tff7b72= Te6edf3powerMetricsTb4b4b4.Te6edf3toExportTb4b4b4(Tb4b4b4)Tb4b4b4,
Te6edf3powerChannelLabels Tff7b72= Te6edf3powerChannelLabelsTb4b4b4.Te6edf3takeIf Tb4b4b4{ Tffa657itTb4b4b4.Te6edf3isNotEmptyTb4b4b4(Tb4b4b4) Tb4b4b4}Tb4b4b4,
Te6edf3airQualityMetrics Tff7b72= Te6edf3airQualityMetricsTb4b4b4.Te6edf3toExportTb4b4b4(Tb4b4b4)Tb4b4b4,
Te6edf3paxcounter Tff7b72= Te6edf3paxcounterTb4b4b4.Te6edf3toExportTb4b4b4(Tb4b4b4)Tb4b4b4,
Te6edf3metadata Tff7b72= Te6edf3metadataTff7b72?.Te6edf3toExportTb4b4b4(Tb4b4b4)Tb4b4b4,
Tb4b4b4)

Tff7b72private Tff7b72fun Te6edf3WirePositionTb4b4b4.Td2a8fftoExportTb4b4b4(Tb4b4b4)Tb4b4b4: Te6edf3PositionExport? Tff7b72= Te6edf3PositionExportTb4b4b4(
Te6edf3latitude Tff7b72= Te6edf3latitude_iTff7b72?.Te6edf3timesTb4b4b4(Te6edf3GeoConstantsTb4b4b4.Te6edf3DEG_DTb4b4b4)Tb4b4b4,
Te6edf3longitude Tff7b72= Te6edf3longitude_iTff7b72?.Te6edf3timesTb4b4b4(Te6edf3GeoConstantsTb4b4b4.Te6edf3DEG_DTb4b4b4)Tb4b4b4,
Te6edf3altitude Tff7b72= Te6edf3altitudeTb4b4b4,
Te6edf3time Tff7b72= Te6edf3timeTb4b4b4.Te6edf3takeIf Tb4b4b4{ Tffa657it Tff7b72!Tff7b72= T79c0ff0 Tb4b4b4}Tff7b72?.Te6edf3toLongTb4b4b4(Tb4b4b4)Tb4b4b4,
Te6edf3locationSource Tff7b72= Te6edf3location_sourceTb4b4b4.Te6edf3takeIf Tb4b4b4{ Tffa657it Tff7b72!Tff7b72= Te6edf3WirePositionTb4b4b4.Te6edf3LocSourceTb4b4b4.Te6edf3LOC_UNSET Tb4b4b4}Tff7b72?.Te6edf3nameTb4b4b4,
Te6edf3groundSpeed Tff7b72= Te6edf3ground_speedTb4b4b4,
Te6edf3groundTrack Tff7b72= Te6edf3ground_trackTb4b4b4,
Te6edf3satsInView Tff7b72= Te6edf3sats_in_viewTb4b4b4.Te6edf3takeIf Tb4b4b4{ Tffa657it Tff7b72!Tff7b72= T79c0ff0 Tb4b4b4}Tb4b4b4,
Te6edf3precisionBits Tff7b72= Te6edf3precision_bitsTb4b4b4.Te6edf3takeIf Tb4b4b4{ Tffa657it Tff7b72!Tff7b72= T79c0ff0 Tb4b4b4}Tb4b4b4,
Tb4b4b4)
Tb4b4b4.Te6edf3takeUnless Tb4b4b4{ Tffa657it Tff7b72=Tff7b72= Te6edf3PositionExportTb4b4b4(Tb4b4b4) Tb4b4b4}

Tff7b72private Tff7b72fun Te6edf3DeviceMetricsTb4b4b4.Td2a8fftoExportTb4b4b4(Tb4b4b4)Tb4b4b4: Te6edf3DeviceMetricsExport? Tff7b72= Te6edf3DeviceMetricsExportTb4b4b4(
Te6edf3batteryLevel Tff7b72= Te6edf3battery_levelTb4b4b4,
Te6edf3voltage Tff7b72= Te6edf3voltageTb4b4b4,
Te6edf3channelUtilization Tff7b72= Te6edf3channel_utilizationTb4b4b4,
Te6edf3airUtilTx Tff7b72= Te6edf3air_util_txTb4b4b4,
Te6edf3uptimeSeconds Tff7b72= Te6edf3uptime_secondsTb4b4b4,
Tb4b4b4)
Tb4b4b4.Te6edf3takeUnless Tb4b4b4{ Tffa657it Tff7b72=Tff7b72= Te6edf3DeviceMetricsExportTb4b4b4(Tb4b4b4) Tb4b4b4}

T8b949e// Reads the deprecated repeated one_wire_temperature so pre-2.8 stored telemetry still round-trips.
Tf0883e@SuppressTb4b4b4(Ta5d6ff"Ta5d6ffDEPRECATIONTa5d6ff"Tb4b4b4)
Tff7b72private Tff7b72fun Te6edf3EnvironmentMetricsTb4b4b4.Td2a8fftoExportTb4b4b4(Tb4b4b4)Tb4b4b4: Te6edf3EnvironmentMetricsExport? Tff7b72= Te6edf3EnvironmentMetricsExportTb4b4b4(
Te6edf3temperature Tff7b72= Te6edf3temperatureTb4b4b4,
Te6edf3relativeHumidity Tff7b72= Te6edf3relative_humidityTb4b4b4,
Te6edf3barometricPressure Tff7b72= Te6edf3barometric_pressureTb4b4b4,
Te6edf3gasResistance Tff7b72= Te6edf3gas_resistanceTb4b4b4,
Te6edf3voltage Tff7b72= Te6edf3voltageTb4b4b4,
Te6edf3current Tff7b72= Te6edf3currentTb4b4b4,
Te6edf3iaq Tff7b72= Te6edf3iaqTb4b4b4,
Te6edf3distance Tff7b72= Te6edf3distanceTb4b4b4,
Te6edf3lux Tff7b72= Te6edf3luxTb4b4b4,
Te6edf3whiteLux Tff7b72= Te6edf3white_luxTb4b4b4,
Te6edf3irLux Tff7b72= Te6edf3ir_luxTb4b4b4,
Te6edf3uvLux Tff7b72= Te6edf3uv_luxTb4b4b4,
Te6edf3windDirection Tff7b72= Te6edf3wind_directionTb4b4b4,
Te6edf3windSpeed Tff7b72= Te6edf3wind_speedTb4b4b4,
Te6edf3weight Tff7b72= Te6edf3weightTb4b4b4,
Te6edf3windGust Tff7b72= Te6edf3wind_gustTb4b4b4,
Te6edf3windLull Tff7b72= Te6edf3wind_lullTb4b4b4,
Te6edf3radiation Tff7b72= Te6edf3radiationTb4b4b4,
Te6edf3rainfall1h Tff7b72= Te6edf3rainfall_1hTb4b4b4,
Te6edf3rainfall24h Tff7b72= Te6edf3rainfall_24hTb4b4b4,
Te6edf3soilMoisture Tff7b72= Te6edf3soil_moistureTb4b4b4,
Te6edf3soilTemperature Tff7b72= Te6edf3soil_temperatureTb4b4b4,
Te6edf3oneWireTemperature Tff7b72= Te6edf3one_wire_temperatureTb4b4b4.Te6edf3takeIf Tb4b4b4{ Tffa657itTb4b4b4.Te6edf3isNotEmptyTb4b4b4(Tb4b4b4) Tb4b4b4}Tb4b4b4,
Te6edf3oneWireTemperatureCh0 Tff7b72= Te6edf3one_wire_temperature_ch0Tb4b4b4,
Te6edf3oneWireTemperatureCh1 Tff7b72= Te6edf3one_wire_temperature_ch1Tb4b4b4,
Te6edf3oneWireTemperatureCh2 Tff7b72= Te6edf3one_wire_temperature_ch2Tb4b4b4,
Te6edf3oneWireTemperatureCh3 Tff7b72= Te6edf3one_wire_temperature_ch3Tb4b4b4,
Te6edf3oneWireTemperatureCh4 Tff7b72= Te6edf3one_wire_temperature_ch4Tb4b4b4,
Te6edf3oneWireTemperatureCh5 Tff7b72= Te6edf3one_wire_temperature_ch5Tb4b4b4,
Te6edf3oneWireTemperatureCh6 Tff7b72= Te6edf3one_wire_temperature_ch6Tb4b4b4,
Te6edf3oneWireTemperatureCh7 Tff7b72= Te6edf3one_wire_temperature_ch7Tb4b4b4,
Te6edf3adcVoltageCh0 Tff7b72= Te6edf3adc_voltage_ch0Tb4b4b4,
Te6edf3adcVoltageCh1 Tff7b72= Te6edf3adc_voltage_ch1Tb4b4b4,
Te6edf3adcVoltageCh2 Tff7b72= Te6edf3adc_voltage_ch2Tb4b4b4,
Te6edf3adcVoltageCh3 Tff7b72= Te6edf3adc_voltage_ch3Tb4b4b4,
Te6edf3adcVoltageCh4 Tff7b72= Te6edf3adc_voltage_ch4Tb4b4b4,
Te6edf3adcVoltageCh5 Tff7b72= Te6edf3adc_voltage_ch5Tb4b4b4,
Te6edf3adcVoltageCh6 Tff7b72= Te6edf3adc_voltage_ch6Tb4b4b4,
Te6edf3adcVoltageCh7 Tff7b72= Te6edf3adc_voltage_ch7Tb4b4b4,
Tb4b4b4)
Tb4b4b4.Te6edf3takeUnless Tb4b4b4{ Tffa657it Tff7b72=Tff7b72= Te6edf3EnvironmentMetricsExportTb4b4b4(Tb4b4b4) Tb4b4b4}

Tff7b72private Tff7b72fun Te6edf3PowerMetricsTb4b4b4.Td2a8fftoExportTb4b4b4(Tb4b4b4)Tb4b4b4: Te6edf3PowerMetricsExport? Tff7b72= Te6edf3PowerMetricsExportTb4b4b4(
Te6edf3ch1Voltage Tff7b72= Te6edf3ch1_voltageTb4b4b4,
Te6edf3ch1Current Tff7b72= Te6edf3ch1_currentTb4b4b4,
Te6edf3ch2Voltage Tff7b72= Te6edf3ch2_voltageTb4b4b4,
Te6edf3ch2Current Tff7b72= Te6edf3ch2_currentTb4b4b4,
Te6edf3ch3Voltage Tff7b72= Te6edf3ch3_voltageTb4b4b4,
Te6edf3ch3Current Tff7b72= Te6edf3ch3_currentTb4b4b4,
Te6edf3ch4Voltage Tff7b72= Te6edf3ch4_voltageTb4b4b4,
Te6edf3ch4Current Tff7b72= Te6edf3ch4_currentTb4b4b4,
Te6edf3ch5Voltage Tff7b72= Te6edf3ch5_voltageTb4b4b4,
Te6edf3ch5Current Tff7b72= Te6edf3ch5_currentTb4b4b4,
Te6edf3ch6Voltage Tff7b72= Te6edf3ch6_voltageTb4b4b4,
Te6edf3ch6Current Tff7b72= Te6edf3ch6_currentTb4b4b4,
Te6edf3ch7Voltage Tff7b72= Te6edf3ch7_voltageTb4b4b4,
Te6edf3ch7Current Tff7b72= Te6edf3ch7_currentTb4b4b4,
Te6edf3ch8Voltage Tff7b72= Te6edf3ch8_voltageTb4b4b4,
Te6edf3ch8Current Tff7b72= Te6edf3ch8_currentTb4b4b4,
Tb4b4b4)
Tb4b4b4.Te6edf3takeUnless Tb4b4b4{ Tffa657it Tff7b72=Tff7b72= Te6edf3PowerMetricsExportTb4b4b4(Tb4b4b4) Tb4b4b4}

Tff7b72private Tff7b72fun Te6edf3AirQualityMetricsTb4b4b4.Td2a8fftoExportTb4b4b4(Tb4b4b4)Tb4b4b4: Te6edf3AirQualityMetricsExport? Tff7b72= Te6edf3AirQualityMetricsExportTb4b4b4(
Te6edf3pm10Standard Tff7b72= Te6edf3pm10_standardTb4b4b4,
Te6edf3pm25Standard Tff7b72= Te6edf3pm25_standardTb4b4b4,
Te6edf3pm100Standard Tff7b72= Te6edf3pm100_standardTb4b4b4,
Te6edf3pm10Environmental Tff7b72= Te6edf3pm10_environmentalTb4b4b4,
Te6edf3pm25Environmental Tff7b72= Te6edf3pm25_environmentalTb4b4b4,
Te6edf3pm100Environmental Tff7b72= Te6edf3pm100_environmentalTb4b4b4,
Te6edf3particles03um Tff7b72= Te6edf3particles_03umTb4b4b4,
Te6edf3particles05um Tff7b72= Te6edf3particles_05umTb4b4b4,
Te6edf3particles10um Tff7b72= Te6edf3particles_10umTb4b4b4,
Te6edf3particles25um Tff7b72= Te6edf3particles_25umTb4b4b4,
Te6edf3particles50um Tff7b72= Te6edf3particles_50umTb4b4b4,
Te6edf3particles100um Tff7b72= Te6edf3particles_100umTb4b4b4,
Te6edf3co2 Tff7b72= Te6edf3co2Tb4b4b4,
Te6edf3co2Temperature Tff7b72= Te6edf3co2_temperatureTb4b4b4,
Te6edf3co2Humidity Tff7b72= Te6edf3co2_humidityTb4b4b4,
Te6edf3formFormaldehyde Tff7b72= Te6edf3form_formaldehydeTb4b4b4,
Te6edf3formHumidity Tff7b72= Te6edf3form_humidityTb4b4b4,
Te6edf3formTemperature Tff7b72= Te6edf3form_temperatureTb4b4b4,
Te6edf3pm40Standard Tff7b72= Te6edf3pm40_standardTb4b4b4,
Te6edf3particles40um Tff7b72= Te6edf3particles_40umTb4b4b4,
Te6edf3pmTemperature Tff7b72= Te6edf3pm_temperatureTb4b4b4,
Te6edf3pmHumidity Tff7b72= Te6edf3pm_humidityTb4b4b4,
Te6edf3pmVocIdx Tff7b72= Te6edf3pm_voc_idxTb4b4b4,
Te6edf3pmNoxIdx Tff7b72= Te6edf3pm_nox_idxTb4b4b4,
Te6edf3particlesTps Tff7b72= Te6edf3particles_tpsTb4b4b4,
Tb4b4b4)
Tb4b4b4.Te6edf3takeUnless Tb4b4b4{ Tffa657it Tff7b72=Tff7b72= Te6edf3AirQualityMetricsExportTb4b4b4(Tb4b4b4) Tb4b4b4}

Tff7b72private Tff7b72fun Te6edf3PaxcountTb4b4b4.Td2a8fftoExportTb4b4b4(Tb4b4b4)Tb4b4b4: Te6edf3PaxcountExport? Tff7b72=
Te6edf3PaxcountExportTb4b4b4(Te6edf3wifi Tff7b72= Te6edf3wifiTb4b4b4, Te6edf3ble Tff7b72= Te6edf3bleTb4b4b4, Te6edf3uptime Tff7b72= Te6edf3uptimeTb4b4b4)Tb4b4b4.Te6edf3takeUnless Tb4b4b4{ Tffa657it Tff7b72=Tff7b72= Te6edf3PaxcountExportTb4b4b4(Tb4b4b4) Tb4b4b4}

Tff7b72private Tff7b72fun Te6edf3DeviceMetadataTb4b4b4.Td2a8fftoExportTb4b4b4(Tb4b4b4)Tb4b4b4: Te6edf3DeviceMetadataExport Tff7b72= Te6edf3DeviceMetadataExportTb4b4b4(
Te6edf3firmwareVersion Tff7b72= Te6edf3firmware_versionTb4b4b4.Te6edf3takeIf Tb4b4b4{ Tffa657itTb4b4b4.Te6edf3isNotEmptyTb4b4b4(Tb4b4b4) Tb4b4b4}Tb4b4b4,
Te6edf3deviceStateVersion Tff7b72= Te6edf3device_state_versionTb4b4b4.Te6edf3takeIf Tb4b4b4{ Tffa657it Tff7b72!Tff7b72= T79c0ff0 Tb4b4b4}Tb4b4b4,
Te6edf3canShutdown Tff7b72= Te6edf3canShutdownTb4b4b4,
Te6edf3hasWifi Tff7b72= Te6edf3hasWifiTb4b4b4,
Te6edf3hasBluetooth Tff7b72= Te6edf3hasBluetoothTb4b4b4,
Te6edf3hasEthernet Tff7b72= Te6edf3hasEthernetTb4b4b4,
Te6edf3role Tff7b72= Te6edf3roleTb4b4b4.Te6edf3nameTb4b4b4,
Te6edf3positionFlags Tff7b72= Te6edf3position_flagsTb4b4b4.Te6edf3takeIf Tb4b4b4{ Tffa657it Tff7b72!Tff7b72= T79c0ff0 Tb4b4b4}Tb4b4b4,
Te6edf3hwModel Tff7b72= Te6edf3hw_modelTb4b4b4.Te6edf3takeIf Tb4b4b4{ Tffa657it Tff7b72!Tff7b72= Te6edf3HardwareModelTb4b4b4.Te6edf3UNSET Tb4b4b4}Tff7b72?.Te6edf3nameTb4b4b4,
Te6edf3hasRemoteHardware Tff7b72= Te6edf3hasRemoteHardwareTb4b4b4,
Te6edf3hasPKC Tff7b72= Te6edf3hasPKCTb4b4b4,
Te6edf3excludedModules Tff7b72= Te6edf3excluded_modulesTb4b4b4.Te6edf3takeIf Tb4b4b4{ Tffa657it Tff7b72!Tff7b72= T79c0ff0 Tb4b4b4}Tb4b4b4,
Te6edf3hasXeddsa Tff7b72= Te6edf3has_xeddsaTb4b4b4,
Tb4b4b4)

Served by rngit 1.5.0 - Generated in 0.08s